#ifndef GAME_H
#define GAME_H

#include <QWidget>
#include <QMouseEvent>
#include <QMovie>
class QPaint;
namespace Ui {
class Game;
}
class Turret;
class Enemy;
class Bullet;
class GameInfo;
class QTimer;
class MainWindow;
class Levelup;
class Boom;
class Game : public QWidget
{
    Q_OBJECT

public:
    explicit Game(QWidget *parent = 0);
    ~Game();

    GameInfo *gameinfo;
    MainWindow *mainwindow;
    int id;                           //当前是第几关
    int wave;                         //波数
    int current_wave;                 //当前波数
    int money;                        //余额
    int maxHp;                        //最大血量
    int currentHp;                    //当前血量
    QList<Turret*> turret_list;       //炮塔数据列表
    QList<Enemy*> enemy_list;         //敌人数据列表
    QList<Bullet*> bullet_list;       //子弹数据列表
    QList<Boom*> boom_list;           //爆炸GIF
    QTimer *timer;
    //QTimer *load;
    int timeScale;
    int i;
    int eneNum; //辅助变量，计算加载敌人数
    bool init=false;
    int currEneNum;
    //界面变量
    bool createAble=false;
    QPixmap bg;
    bool leveling=false;
    Levelup *levelUI;
    int mouseType;                    //鼠标点击事件    0初始状态 1 选择炮塔1
    QMovie *gif[10];


    void loadscene(int id);           //加载关卡


    void remove_enemy(Enemy* enemy);  //除去敌人
    void remove_turret(Turret* turret);//除去炮塔
    void remove_bullet(Bullet* bullet);//除去子弹
    void add_turret(QPoint pos,int type,Game *game);   //参数未定
    void add_enemy(QPoint pos,int type,Game *game);    //同上
    void add_bullet(int power,int type,int targetType,Game *game,QPoint pos,Enemy *enemy=0,Turret *turret=0);   //同上
    void add_boom(QPoint pos);
    void remove_boom(Boom *boom);
    bool check_turret(Turret* turret);    //检查炮塔是否存在
    bool check_bullet(Bullet* bullet);    //同上，子弹
    bool check_enemy(Enemy* ememy);       //同上，敌人
    void checkHp();      //检查敌人是否到达终点，同时扣血
    void win();
    void lose();
    void earn_money(int money);
    bool pay_money(int money);

    void game_start();    //
    void fast_game();     //二倍速游戏
    void Pause();         //游戏暂停
    void MapUpdate();     //刷新数据



    double dis_point_seg(const QPoint p,const QPoint s,const QPoint t);
    //界面函数
    bool judge_turret(QPoint pos,double radius);
private:
    Ui::Game *ui;

private slots:
    void nextwave();                  //下一波敌人

    void updateMap();

    void on_toolB_1_clicked();

    void on_toolB_2_clicked();

    void on_pushB_1_toggled(bool checked);

    void on_pushB_2_toggled(bool checked);

    void on_toolB_3_clicked();

    void on_toolB_4_clicked();

    void on_toolB_5_clicked();

protected:
    void paintEvent(QPaintEvent *event);

    void mousePressEvent(QMouseEvent* event);
        //鼠标移动事件
    //void mouseMoveEvent(QMouseEvent *event);
        //鼠标释放事件
    //void mouseReleaseEvent(QMouseEvent *event);
};

#endif // GAME_H
